﻿using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using QuanLyHopDong.Biz.Model;

namespace QuanLyHopDong.Biz
{
    public class KhoiLuongVatTuBiz
    {
        #region Selection

        public List<KhoiLuongVatTuView> GetKhoiLuongVatTuViews(int hopDongId)
        {
            using (var db = new HopDongEntities())
            {
                return db.KhoiLuongVatTuViews.Where(x => x.HopDongId == hopDongId).ToList();
            }
        }

        public List<KhoiLuongVatTuView> KhoiLuongVatTuTheoTuyen(int khoiLuongId)
        {
            using (var db = new HopDongEntities())
            {
                return db.KhoiLuongVatTuViews.Where(x => x.KhoiLuongId == khoiLuongId).ToList();
            }
        }

        public KhoiLuongVatTuView GetById(int id)
        {
            using (var db = new HopDongEntities())
            {
                return db.KhoiLuongVatTuViews.FirstOrDefault(x => x.Id == id);
            }
        }

        public List<VatTuView> XuatBang4A(int hopDongId)
        {
            using (var db = new HopDongEntities())
            {
                return db.VatTuViews.Where(x => x.HopDongId == hopDongId).ToList();
            }
        }

        #endregion

        #region CRUD

        public void Create(KhoiLuongVatTu khoiLuongVatTu)
        {
            if (khoiLuongVatTu == null)
                return;
            if (string.IsNullOrWhiteSpace(khoiLuongVatTu.VatTuName))
                return;

            using (var db = new HopDongEntities())
            {
                // check vat tu exists
                var vatTu = db.VatTus.FirstOrDefault(x => x.Name == khoiLuongVatTu.VatTuName);
                if (vatTu == null)
                {
                    // add new vattu
                    vatTu = new VatTu {Name = khoiLuongVatTu.VatTuName};
                    db.VatTus.Add(vatTu);
                    db.SaveChanges();
                }
                khoiLuongVatTu.VatTuId = vatTu.Id;

                // add khoiluongvattu
                db.KhoiLuongVatTus.Add(khoiLuongVatTu);
                db.SaveChanges();
            }
        }

        public void Update(KhoiLuongVatTu khoiLuongVatTu)
        {
            if (khoiLuongVatTu == null)
                return;
            if (khoiLuongVatTu.Id < 0)
                return;
            if (string.IsNullOrWhiteSpace(khoiLuongVatTu.VatTuName))
                return;

            using (var db = new HopDongEntities())
            {
                // check vat tu exists
                var vatTu = db.VatTus.FirstOrDefault(x => x.Name == khoiLuongVatTu.VatTuName);
                if (vatTu == null)
                {
                    // add new vattu
                    vatTu = new VatTu { Name = khoiLuongVatTu.VatTuName };
                    db.VatTus.Add(vatTu);
                    db.SaveChanges();
                }
                khoiLuongVatTu.VatTuId = vatTu.Id;

                // add khoiluongvattu
                db.KhoiLuongVatTus.Attach(khoiLuongVatTu);
                db.Entry(khoiLuongVatTu).State = EntityState.Modified;
                db.SaveChanges();
            }
        }

        public void Delete(int id)
        {
            using (var db = new HopDongEntities())
            {
                db.DeleteKhoiLuongVatTu(id);
            }
        }
        
        #endregion
    }
}
